package com.newtouch.bxzs.enterprise.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.newtouch.bxzs.enterprise.model.bo.*;
import com.newtouch.bxzs.enterprise.model.vo.*;

import java.util.List;

/**
 * 营销活动service类
 *
 * <p>
 * <b>History:</b>
 * <table border="1">
 * <tr>
 * <th>Date</th>
 * <th>Operator</th>
 * <th>Memo</th>
 * </tr>
 * <tr>
 * <td>2021年2月9日</td>
 * <td>Amour</td>
 * <td>Create</td>
 * </tr>
 * </table>
 * 
 * @author Amour
 * 
 * @version 1.0.0
 * @since 1.0.0
 */
public interface ActivityService {
	/**
	 * 获取营销活动信息列表
	 * 
	 * @param ActivityVO
	 * @return
	 */
	IPage<ActivityBO> getActivityList(ActivityVO activityVO);

	/**
	 * 获取营销活动信息列表
	 * 
	 * @param ActivityVO
	 * @return
	 */
	IPage<ActivityBO> getAchievementActivityList(ActivityAchievementVO activityVO);

	/**
	 * 获取营销活动详情
	 * 
	 * @param ActivityId
	 *            营销活动ID
	 * @param managerFlag
	 *            是否为管理岗
	 * @return
	 */
	ActivityDetailBO getActivityDetail(String activityId, Boolean managerFlag);

	/**
	 * 获取营销活动产品列表
	 * 
	 * @param ActivityProductVO
	 *            营销活动产品信息查询VO
	 * @return
	 */
	IPage<ConferenceActivityProductBO> getActivityProduct(ActivityProductVO activityProductVO);

	/**
	 * 查看营销活动客户信息
	 * 
	 * @param ActivityId
	 *            营销活动ID
	 * @param customerName
	 *            客户姓名
	 * @return
	 */
	IPage<ConferenceActivityCustomerBO> getActivityCustomerList(ActivityCustomerVO activityCustomerVO);

	/**
	 * 添加营销活动个人客户
	 * 
	 * @param ActivityId
	 *            营销活动ID
	 * @param list
	 *            需要新增的营销活动客户信息
	 * @return
	 */
	Integer insertActivityPersonalCustomer(String activityId, Boolean personalFlag, List<CustomerDetailVO> list);

	/**
	 * 删除营销活动个人客户
	 * 
	 * @param activityId
	 *            营销活动ID
	 * @param customerId
	 *            客户ID
	 * @return
	 */
	Integer deleteActivityPersonalCustomer(String activityId, String customerId);

	/**
	 * 新增、修改营销活动信息
	 * 
	 * @param ActivityModifyVO
	 *            新增、修改营销活动信息VO
	 * @return
	 */
	String modifyActivity(ActivityModifyVO activityModifyVO);

	/**
	 * 
	 * 获取客户分配情况列表
	 * 
	 * @param ActivityId
	 *            营销活动id
	 * @param distributionFlag
	 *            是否查询已分配客户
	 * @param currentPage
	 *            起始页
	 * @param pageSize
	 *            每页数量
	 * @return
	 */
	IPage<ConferenceActivityCustomerBO> getDistributionCustomerList(String activityId, Boolean distributionFlag,
			Integer currentPage, Integer pageSize);

	/**
	 * 保存分配客户信息
	 * 
	 * @param distributionCustomerVO
	 *            分配客户VO
	 * @return
	 */
	Integer modifyDistributionCustomer(DistributionCustomerVO distributionCustomerVO);

	/**
	 * 取消活动
	 * 
	 * @param ActivityId
	 *            营销活动id
	 * @return
	 */
	Integer cancelActivity(String activityId);

	/**
	 * 删除营销活动
	 * 
	 * @param ActivityId
	 *            营销活动id
	 * @return
	 */
	Integer deleteActivity(String activityId);

	/**
	 * 查询营销活动统计信息
	 * 
	 * @param ActivityId
	 *            营销活动id
	 * @return
	 */
	ConferenceActivityStatisticsBO getActivityStatistics(String activityId);

	/**
	 * 接收营销活动信息
	 * 
	 * @param ActivityDetail
	 *            接收营销活动推送信息VO
	 * @return
	 */
	Integer acceptionActivity(ActivityAcceptionVO activityAcception);

	/**
	 * 查询营销活动本端用户信息
	 * 
	 * @param ActivityUserVO
	 *            营销活动用户信息查询VO
	 * @return
	 */
	IPage<ConferenceActivityUserBO> getActivityUser(ActivityUserVO activityUserVO);

	/**
	 * 查询营销活动合作公司用户信息
	 * 
	 * @param ActivityUserVO
	 *            营销活动用户信息查询VO
	 * @return
	 */
	IPage<ConferenceActivityUserBO> getActivityCooperationUser(ActivityUserVO activityUserVO);

	/**
	 * 参加营销活动
	 * 
	 * @param userId
	 *            用户ID
	 * @return
	 */
	Integer joinActivity(String userId, String activityId);

	/**
	 * 电话联系客户
	 * 
	 * @param activityId
	 *            活动ID
	 * @param customer
	 *            客户信息
	 * @return
	 */
	Integer contactCustomer(String activityId, CustomerDetailVO customer);

	/**
	 * 推送客户
	 * 
	 * @param activityId
	 *            活动ID
	 * @param customer
	 *            客户信息
	 * @return
	 */
	String pushCustomer(String activityId, CustomerDetailVO customer);

}
